package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.SicRgDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class SicRg implements Serializable {

	private String id = "";
	private Long numeroRg = 0L;
	private Integer dataNasc = 0;
	private Integer dataAtu = 0;
	private String flag = "";
	private ResultSet consulta = null;
	private SicRgDAO sicRgDAO = new SicRgDAO();

	public SicRg() {
		super();
	}

	public SicRg(String id, Long numeroRg, Integer dataNasc, Integer dataAtu, String flag) {
		super();
		this.id = id;
		this.numeroRg = numeroRg;
		this.dataNasc = dataNasc;
		this.dataAtu = dataAtu;
		this.flag = flag;
	}

	public void grava() {

		try {
			this.id = sicRgDAO.insert(numeroRg, dataNasc, dataAtu, flag);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualiza() {

		try {
			sicRgDAO.update(this.id, numeroRg, dataNasc, dataAtu, flag);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void exclui() {

		try {
			sicRgDAO.delete(this.id);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean leituraDataNasc() {

		try {
			if (consulta == null) {
				consulta = sicRgDAO.readDataNasc();
			} else {
				consulta = sicRgDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraNumeroRg() {

		try {
			if (consulta == null) {
				consulta = sicRgDAO.readNumeroRg();
			} else {
				consulta = sicRgDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaNumeroRg(Long pNumeroRg) {

		try {
			if (consulta == null) {
				consulta = sicRgDAO.selectNumeroRg(pNumeroRg);
			} else {
				consulta = sicRgDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(sicRgDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.numeroRg = lista.getLong("numeroRg");
			this.dataNasc = lista.getInt("dataNasc");
			this.dataAtu = lista.getInt("dataAtu");
			this.flag = lista.getString("flag");
		} catch (SQLException e) {
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Long getNumeroRg() {
		return numeroRg;
	}

	public void setNumeroRg(Long numeroRg) {
		this.numeroRg = numeroRg;
	}

	public Integer getDataNasc() {
		return dataNasc;
	}

	public void setDataNasc(Integer dataNasc) {
		this.dataNasc = dataNasc;
	}

	public Integer getDataAtu() {
		return dataAtu;
	}

	public void setDataAtu(Integer dataAtu) {
		this.dataAtu = dataAtu;
	}

	public String getFlag() {
		return flag;
	}

	public void setFlag(String flag) {
		this.flag = flag;
	}

	public void fecha() {
		sicRgDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return sicRgDAO.nroRegistro;
	}

	public long totalRegistros() {
		return sicRgDAO.qtdRegistros;
	}

}
